<?php
/*
	兼容插件开发
	
*/
defined('BY_JYA') or exit('error');
$_RQ['op']=$_RQ['op']?$_RQ['op']:'local';
$return=array();
$return['styles']=array(
		'1'=>'行业应用',
		'2'=>'促销应用',
		'3'=>'互动营销',
		'4'=>'游戏营销',
		'5'=>'辅助应用',
		'6'=>'云接口',
);
$tabs=array(
	array('action'=>'/app_develop.old_plugin/','title'=>'插件列表'),
	array('action'=>'/app_develop.old_plugin_local/local/','op'=>'local','title'=>'本地安装'),
);
$styles=get_plugin_styles();
if($_RQ['op'] == 'local'){
	//本地应用安装和更新，含有config.json配置文件的应用即认为是本地应用
	$local_plugins=model('core/module')->local_plugins(4);
	foreach($local_plugins as &$item){
		$info=pdo_get('core_plugins',array('name'=>$item['name']),array('is_my','cloud_id'));
		$item['is_my']=$info['is_my'];
	}
	$return['list']=$local_plugins;
	$return['htmls']=array(
		'type'=>'list',
		'tabs'=>$tabs,
		'list'=>array('data'=>'list','key'=>'name','tip'=>'[温馨提示]：
		</br>[<red>兼容插件安装后访问空白？</red>]
		</br>1、排查插件有没有加密文件?只要带加密文件，都无法正常允许，也存在很大的不安全性！
		</br>2、系统管理--系统日志--错误日志，看看有没有数据库保存，如果有报错，可以点击《上报》。我们会第一时间优化；
		</br>3、开启调试摸索（系统管理--系统设置--开启调试模式，把当前访问IP填入《调试白名单》），再次打开空白页面，看看有没有报错。
		','del_one'=>false,'delall'=>false,'edit'=>false,'list'=>array(
			array('name'=>'logo','title'=>'插件logo','type'=>'image'),
			array('name'=>'title','title'=>'插件名称','type'=>'string'),
			array('name'=>'name','title'=>'插件标识','type'=>'string'),
			array('name'=>'old_version','title'=>'当前版本','type'=>'string'),
			array('name'=>'version','title'=>'待更新版本','type'=>'string'),
		),'action'=>array(
			array('op'=>'setmy','title'=>'加入开发列表','type'=>'post','show'=>array('is_my'=>0,'install_status'=>1)),
			array('type'=>'post','op'=>'local_install','title'=>'安装','show'=>array('install_status'=>0)),
			array('type'=>'post','op'=>'local_update','title'=>'更新','show'=>array('has_new_version'=>1)),
			array('type'=>'post','op'=>'local_uninstall','title'=>'卸载','show'=>array('install_status'=>1),'message'=>'确认卸载吗！'),
		)),
	);
	exi($return);
}
if($_RQ['op']=='setneed_menu'){
	if($_RQ['postdata']){
		$post=get_postdata();
		$update=array('need_menu'=>intval($post['need_menu']));
		pdo_update('core_old_plugins',$update,array('name'=>$post['name']));
		exi('设置成功！','','//local/');
	}
	$name=$_RQ['name'];
	$item=pdo_get('core_old_plugins',array('name'=>$name),array('name','need_menu'));
	$return['item']=$item;	
	$htmls=array(
		'type'=>'edit',
		'desc'=>'独立菜单',
	);
	$htmls['edit']=array(
			array('type'=>'tip','title'=>'【温馨提示】：当你只有一个后台菜单的时候，很有可能安装的时候，默认使用《插件自己的菜单》，这种情况下，你如果要用系统的菜单，就要这个设置一下！'),
			array('type'=>'radio','title'=>'设置菜单机制','name'=>'need_menu','options'=>'need_menu'),
	);
	$return['need_menu']=array('插件自己的菜单','系统的菜单');
	$return['htmls']=$htmls;
	exi($return);
}
$local_ops=array('setmy','local_install','local_update','local_uninstall');
if(in_array($_RQ['op'],$local_ops)){
	$plugin_name=trim($_RQ['name']);
	if(!$plugin_name){
		exi('请先选择要安装的插件！','error');
	}
	if(preg_match('/\W/',$plugin_name)){
		exi('插件标识不合法！','error');
	}
	$config_data = model('core/module')->get_manifest($plugin_name);
	if(empty($config_data)){
		exi('插件配置文件不存在！','error');
	}
	if($config_data['application']['identifie']!=$plugin_name){
		exi($config_data['application']['identifie'].'插件配置文件-插件标识跟插件目录文件名不一致！'.$plugin_name,'error');
	}
}
if($_RQ['op'] == 'setmy'){
	//加入开发
	pdo_update('core_plugins',array('is_my'=>1),array('name'=>$plugin_name));
	exi('加入成功','','local');
}
if($_RQ['op'] == 'local_install'){
	//本地安装
	$check=pdo_get('core_plugins',array('name'=>$plugin_name),'id');
	if($check){
		exi('插件已安装，请勿重复安装！','error');
	}
	$check_config_data = model('core/module')->manifestxml_check($plugin_name, $config_data);
	if (is_error($check_config_data)) {
		exi($check_config_data['message'],'error');
	}
	$updatedata = model('core/module')->int_update($config_data);
	if (file_exists(ROOT_PLUGIN . $updatedata['name'] . '/icon-custom.jpg')) {
			$updatedata['image'] = '../addons/' . $updatedata['name'] . '/icon-custom.jpg';
	} else {
			$updatedata['image'] = '../addons/' . $updatedata['name'] . '/icon.jpg';
	}
	//安装数据库
	model('core/module')->run_xmlsql($config_data, 'install');
	$menus=model('core/module')->get_filemenus($updatedata['name']);
	$updatedata['menus']=$menus?ijson_encode($menus):$updatedata['menus'];
	$config_data['need_menu']=$updatedata['need_menu'];
	unset($updatedata['need_menu']);
	$updatedata['is_my']=1;
	pdo_insert('core_plugins',$updatedata);
	model('core/module')->insert_more($updatedata,$config_data);
	exi('安装成功！如果模块尚未出现在扩展功能栏，请刷新页面！','','local');
}
if($_RQ['op'] == 'local_update'){
	//本地更新	
	$plugin=pdo_get('core_plugins',array('name'=>$plugin_name),array('id','version','release'));
	if(!$plugin){
		exi('插件尚未安装，无法更新！','error');
	}
	if($config_data && version_compare($plugin['version'],$config_data['application']['version'],'>')){
		exi('插件已是最新，无需更新！','error');
	}
	$updatedata = model('core/module')->int_update($config_data);
	//安装数据库
	model('core/module')->run_xmlsql($config_data, 'update');
	$menus=model('core/module')->get_filemenus($plugin_name);
	if(count($menus)){
		$updatedata['menus']=ijson_encode($menus);
	}
	pdo_update('core_plugins',$updatedata,array('id'=>$plugin['id']));
	model('core/module')->update_more($updatedata,$config_data);
	//更新页面缓存
	core_setting('cache',array('urlargs'=>TIMESTAMP));
	exi('更新成功！','','local');
}
if($_RQ['op'] == 'local_uninstall'){
	//本地卸载：删除插件表记录、删除权限表记录、删除插件数据表
	$plugin=pdo_get('core_plugins',array('name'=>$plugin_name),array('id','name','title'));
	if(!$plugin){
		exi('插件尚未安装，无法卸载！','error');
	}
	model('core/module')->unrun_xmlsql($config_data,$plugin_name);
	pdo_delete('core_plugins',array('id'=>$plugin['id']));
	pdo_delete('core_plugin_permissions',array('plugin'=>$plugin['name']));
	pdo_delete('core_old_plugins',array('name'=>$plugin['name']));
	exi("插件【{$plugin['title']}】卸载成功",'','local');
}